
package com.xbongbong.paas.log.entity;

import com.xbongbong.paas.enums.DelEnum;
import com.xbongbong.paas.toolbox.util.DateUtil;
import com.xbongbong.saas.constant.BasicConstant;
import com.xbongbong.saas.enums.OperateModuleTypeEnum;
import com.xbongbong.saas.enums.OperateTypeEnum;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serializable;

/**
 * 操作日志实体,对应mongodb表
 *
 * @author kaka
 * @date 2018-9-14
 */
@Data
@Document(collection = "operate_log")
public class OperateLogEntity implements Serializable {

    private static final long serialVersionUID = -7503850786392383149L;

    //========== properties ==========

    /**
     * 主键
     */
    @Id
    private String id;
    /**
     * 公司ID
     */
    private String corpid;
    /**
     * 操作人ID
     */
    private String opUserId;
    /**
     * 操作人姓名
     */
    private String opUserName;
    /**
     * 所属操作模块标示
     */
    private Integer moduleType;
    /**
     * 所属模块名称
     */
    private String moduleName;
    /**
     * 所属对象ID
     */
    private String opObjectId;
    /**
     * 操作类型名称
     */
    private String opTypeName;
    /**
     * 操作对象名称
     */
    private String opObjectName;
    /**
     * 操作类型，即新增，修改，删除等
     */
    private Integer opType;
    /**
     * 备注
     */
    private String memo;
    /**
     * 操作时间
     */
    private Integer addTime;
    /**
     * 是否删除
     */
    private Integer del;
    /**
     * 保存referer,path,user-agent,ip等信息，用逗号隔开
     */
    private String httpHeader;
    /**
     * 是否展示详情，0否1是
     */
    private Integer detail;

    public OperateLogEntity() {
        this.addTime = DateUtil.getInt();
        this.del = DelEnum.NORMAL.getDel();
        this.detail = BasicConstant.ZERO;
    }

    /**
     * 日志构造方法
     * 注意，detail的值关系到是否有详情日志
     * @param  corpid 公司ID
     * @param  opUserId 操作人ID
     * @param  opUserName 操作人姓名
     * @param  operateModuleType  操作模块枚举，用于日志记录
     * @param  operateType 操作类型枚举，用于日志记录
     * @param  opObjectId 所属对象ID
     * @param  opObjectName 操作对象名称
     * @param  memo 备注
     * @param  httpHeader 目前没有优雅的方式拿到，或者说需要拿到这个值对代码有侵害，暂时用空字符串
     * @param  detail 是否展示详情，0否1是
     * @author zcp
     * @date 2019/6/27 17:03
     * @since v1.0
     * @version v1.0
     */
    public OperateLogEntity(String corpid, String opUserId, String opUserName, OperateModuleTypeEnum operateModuleType, OperateTypeEnum operateType, String opObjectId, String opObjectName, String memo, String httpHeader, Integer detail) {
        this();
        this.corpid = corpid;
        this.opUserId = opUserId;
        this.opUserName = opUserName;
        this.moduleType = operateModuleType.getCode();
        this.moduleName = operateModuleType.getName();
        this.opObjectId = opObjectId;
        this.opObjectName = opObjectName;
        this.opType = operateType.getCode();
        this.opTypeName = operateType.getName();
        this.memo = memo;
        this.httpHeader = httpHeader;
        this.detail = detail;
    }
}

